import axios from 'axios';
import { useAuthStore } from '../stores/authStore';

const api = axios.create({
  baseURL: 'http://127.0.0.1:8080',
  headers: {
    'Content-Type': 'application/json',
  },
});

// 【核心修复】添加请求拦截器
// 这个拦截器会在每个请求发送前执行
api.interceptors.request.use(config => {
  // 从 Pinia store 或 localStorage 获取 token
  const authStore = useAuthStore();
  const token = authStore.token || localStorage.getItem('token');

  // 如果 token 存在，则将其添加到请求的 Authorization 头中
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }

  return config;
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 【核心新增】响应拦截器：处理全局的API响应错误
api.interceptors.response.use(
  // 对成功的响应直接返回
  response => response,
  // 对失败的响应进行统一处理
  error => {
    // 如果错误响应存在，并且状态码是401
    if (error.response && error.response.status === 401) {
      // 获取authStore实例
      const authStore = useAuthStore();

      // 执行登出操作，清空本地的无效token
      authStore.logout();

      // 给用户一个明确的提示
      ElMessage.error('您的登录已过期或无效，请重新登录。');

      // 强制跳转到登录页面
      // 使用 window.location.href 可以确保页面完全刷新，状态最干净
      window.location.href = '/login';
    }

    // 将错误继续抛出，以便具体的业务代码可以捕获
    return Promise.reject(error);
  }
);

export default api;
